Non-volatile memory systems, such as flash memory, have been widely adopted for use in consumer products. Flash memory is used in numerous applications including mobile phones, digital cameras, MP3 players and many other applications. Flash memory may be found in different forms, for example in the form of a portable memory card that can be carried between host devices or as a solid state disk (SSD). In order to be cost efficient, it is desirable to implement SSD memories using high density Multi-Level Cell (MLC) flash memories rather than Single-Level Cell (SLC) flash memory which has 1-bit per cell storage capacity. Using MLC technology, the memory capacity can be increased by a factor of 3 (for MLC storing 3 bits in each cell) or even by a factor of 4 (for memories storing 4 bits in each cell) as compared to SLC flash without increasing the physical dimensions of the memory. What increases in MLC flash is the amount of data stored in each memory cell and in each physical page (Word Line (WL)) of the memory.
Sophisticated and modern error correction codes (ECC) are typically implemented in order to guarantee that the data can be read from flash memory without errors, particularly in MLC flash memory. The error correction coding scheme used to protect the user data, and the mapping of the code words into the pages of the WL, directly affect the reliability of the data and the efficiency of accessing it (i.e. the programming and reading speed). Unfortunately, the requirements for reliability and fast access are usually contradicting. For example, long code words typically provide better error correction and a lower error floor, which in turn provide higher reliability and better cycling and data retention specification. On the other hand, using long code words implies longer transfer and decoding times, incurring potentially unacceptable latencies, especially if very small data chunks (e.g. a 0.5 KB sector) are used. Also, as a function of the mapping from bits to states, the different pages of a WL potentially exhibit different reliabilities (i.e. different error rates).